从 Elasticsearch 到 Apache Doris,统一日志检索与报表分析,360 企业安全浏览器的数据架构升级实践
随着 360 企业安全浏览器用户规模的不断扩张,浏览器短时间内会产生大量的日志数据。为提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降了 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
作者|360 企业安全浏览器 刘子健
近年来,随着网络攻击和数据泄露事件的增加,使得浏览器安全问题变得更加紧迫和严峻。漏洞一旦被利用,一个简单的链接就能达到数据渗透的目的,而传统浏览器在安全性和隐私保护方面存在一些限制,无法满足政企领域对于安全浏览的需求。在此背景下,360企业安全浏览器成为政企客户的首选,以提供统一管理、降本增效、安全可控的解决方案。
随着 360 企业安全浏览器用户规模的不断扩张,浏览器短时间内会产生大量的日志数据,这些数据具有格式多样化、信息维度丰富、时效要求高、数据体量大和隐私安全性高等特点。如果能够对这些数据进行有效分析,可及时发现潜在威胁并提升网站使用体验,因此我们设计了统一运维管理平台。该平台旨在对终端层、应用层和安全层进行监控和分析,并进行多维度分析和可视化展示。
在应用层,提供应用总览、访问分析、性能分析、体验分析以及异常分析等功能,可全面了解应用的运行状况,及时发现并解决应用中存在的问题。 在终端层,提供终端导览和终端活跃分析功能,及时掌握终端设备状况,从而更好地管理和优化终端性能。 在安全层,提供策略预警和策略建议等功能,可及时发现和预防安全风险,提高系统的安全性。
对于政企相关单位而言,浏览器受到攻击可能导致大量隐私数据泄露,给单位和个人带来难以预料的后果。因此,为保障客户信息的安全,统一运维管理平台应具备以下几个能力:
实时告警:部分客户对查询性能有较高的要求。比如:实时统计服务异常或系统崩溃的次数,并第一时间反馈给相关负责人解决。 导入性能:在业务运行过程中,生成的日志数据会被保存在服务器上。在高并发的情况下,日志数据量非常庞大,因此对导入性能有较高的要求。 数据一致性:数据一致性对任何行业来说都是关键考虑因素,只有在数据一致的基础上进行指标计算,才能确保统计结果的准确性。 部署简单:因 360 企业安全浏览器主要为政企提供服务,通常采用私有化部署的方式,这意味着服务和客户端将完全集成在客户本地环境中。这就要求架构要足够精简,在确保在实现功能的同时,尽可能降低部署的复杂度。
架构 1.0:基于 Elasticsearch 的简洁日志处理架构
MySQL 主要存储业务相关数据以及少量计算完成的统计数据,用于管理平台中随查随用,Elasticsearch 主要用于存储日志类数据,以支持数据实时分析和检索需求。Redis 主要用于存储热数据和管理平台的配置信息,以提高接口性能。
Elasticsearch 索引不支持变更:Elasticsearch 一旦创建索引,不再支持更改,分词参数和字段类型也无法修改。当提出新的业务需求时,就需要创建新的索引,并需要编写脚本将历史数据迁移至新索引中,这就带来较高的操作和开发成本。 Elasticsearch 聚合性能差:当执行复杂的聚合查询或存在大量聚合任务时,Elasticsearch 需要为聚合操作分配大量的内存,如果计算资源不足,会造成聚合操作执行时间过长,从而影响查询效率。
架构 1.1:引入 Apache Doris 1.0 版本
支持多种数据模型:支持 Aggregate、Unique、Duplicate 三种数据类型,其中 Aggregate Key 模型能够在快速且准确的写入数据的同时进行数据聚合,即通过提前聚合大幅提升查询性能。 采用列式存储:Doris 按列进行数据编码压缩和读取,从而实现极高压缩比,该存储方式也减少了大量非相关数据的扫描,提高 IO 和 CPU 资源的利用率。 支持物化视图:既能对原始明细数据进行任意维度的分析,也能快速对固定维度进行分析查询,对于查询性能的提升有显著的效果。
开发效率提升:相比之前需要编写复杂的 Elasticsearch 聚合代码,现在只需要创建聚合 Key,Doris Aggregate 模型即可完成聚合计算,极大提升了数据开发的效率。 数据一致性保证:Doris 提供了统一的数仓服务,数据的导入、计算和存储均可在 Doris 中实现,简化了数据处理的链路和复杂度,对数据一致性的保障起关键作用。 查询性能提升:当面对 4000 万条数据的聚合查询时,Elasticsearch 需要 6-7 秒才能返回查询结果,而 Doris 在 1 秒内就能完成查询并返回结果,查询性能显著提升。
group by
,由于其语法与标准 MySQL 协议存在差异,因此语法结构相对复杂。 "aggregations": {
"group_day_time": {
"aggregations": {
"group_urltitle": {
"aggregations": {
"group_app_id": {
"aggregations": {
"group_url_host": {
"aggregations": {
"group_org_id": {
"terms": {
"field": "org_id",
"size": 200000
}
}
},
"terms": {
"field": "url_host",
"size": 200000
}
}
},
"terms": {
"field": "app_id",
"size": 10000
}
}
},
"terms": {
"field": "urltitle",
"size": 100000
}
}
},
"date_histogram": {
"calendar_interval": "day",
"field": "day_time"
}
}
}
当用户遇到问题时,我们需要向客户发送大量的 Curl 命令来排查问题。然而,对于没有 Elasticsearch 使用经验的用户来说,语法调试难度非常高。
curl -u elastic:elastic 'http://127.0.0.1:9200/user_log*/_search?ignore_unavailable=true&pretty=true' -H 'Content-Type: application/json' -d '{"aggregations":{"group_day_time":{"aggregations":{"group_sysname":{"aggregations":{"group_app_id":{"aggregations":{"group_url_host":{"aggregations":{"group_org_id":{"terms":{"field":"org_id","size":200000}}},"terms":{"field":"url_host","size":200000}}},"terms":{"field":"app_id","size":10000}}},"terms":{"field":"sysname","size":100000}}},"date_histogram":{"calendar_interval":"day","field":"day_time"}}},"query":{"bool":{"filter":[{"range":{"day_time":{"from":"2022-06-02T00:00:00+08:00","include_lower":true,"include_upper":true,"to":null}}},{"range":{"day_time":{"from":null,"include_lower":true,"include_upper":false,"to":"2022-06-03T00:00:00+08:00"}}}]}}}'
引入 Apache Doris 后,在创建表时可以使用 Aggregate Key 模型来定义聚合条件。且 Apache Doris 支持标准 MySQL ,不仅语法更加简洁、查询也更加方便,如出现问题,只要熟悉 MySQL 的基本语法,便可以快速进行问题排查。
CREATE TABLE user_log
(
day_time datetime DEFAULT NULL COMMENT ‘时间',
org_id int(10) DEFAULT ‘0’ COMMENT ‘组织id',
app_id int(10) DEFAULT ‘0’ COMMENT ‘应用id',
url_host varchar(255) DEFAULT NULL COMMENT 'url地址‘,
urltitle varchar(255) DEFAULT '' COMMENT 'title',
pv_count BIGINT SUM DEFAULT "0" COMMENT "总数"
) Aggregate KEY(day_time,org_id,app_id, url_host, urltitle)
PARTITION BY RANGE (day_time) ()
DISTRIBUTED BY HASH(day_time) BUCKETS 10
SELECT day_time,org_id,app_id,url_host,urltitle,sum(pv_count) as pv
FROM user_log
WHERE day_time >= "2022-06-02" and day_time <= "2022-06-03"
GROUP BY day_time,org_id,app_id,url_host,urltitle
ORDER BY uv desc;
而在架构 1.1 版本中,我们仍然面临一些挑战和问题:
Bitmap 问题:在处理大规模数据时,对于字符串类型基数很高的数据,如果直接使用 Bitmap,计算性能无法很好满足。 数据准确性问题:当对 75 万基础数据测试时,Bitmap 哈希冲突可能导致数据准确性问题。 存储空间:由于 Elasticsearch 还未被 Apache Doris 全部替换,目前系统仍存在存储资源消耗较大的问题。
架构 2.0 :引入 Apache Doris 2.0,全面替代 Elasticsearch
支持 JOSN 格式:Apache Doris 2.0 支持 JSON 格式,在我们的数据中有大量采用 JSON 格式的数据,该能力使我们能够更方便地进行数据存储。 支持部分列更新:2.0 版本支持了部分列更新功能,无需对整个数据集进行更新,这种精确的更新方式大大降低了计算资源的消耗,提高了数据更新效率。 支持倒排索引:2.0 版本支持倒排索引,可以满足字符串类型的全文检索和普通数值/日期等类型的等值、范围检索,更加符合日志数据分析的场景的查询需求。
01 简单易用,提升开发效率
02 合理进行表设计,满足查询秒级响应
UV 采用 BITMAP 聚合模型,聚合函数 BITMAP_UNION PV 采用 BIGINT 类型,聚合函数 SUM 留存:BITMAP_INTERSECT 众数:TOPN
SUM 性能评估
select count(*) from testorg; # 5400179000
select org_id,sum(app_pv_count) from org_stats where os_type="windows" and day_time > "2023-07-01" and org_id >0 group by org_id; # 0.32s
Bitmap 性能评估
select count(*) from testlog; # 90000
select app_id,day_time,bitmap_union_count(ip_pv_count) from test group by app_id,day_time ; #0.5s
03 相较 Elasticseach,存储成本降低 60%
收益总结
将日志检索和报表分析统一到一个系统中,Doris 2.0 版本在增加倒排索引后,能同时满足这两个场景,从而缩短了数据处理的链路和复杂度,显著提高了数据处理的效率。 聚合分析性能得到数量级的提升,之前在 Elasticseach 中需要近 10 秒才能完成聚合查询,而在 Doris 中不到 1 秒就能完成,聚合分析效率至少提升 100%。 Doris 提供了高效的数据压缩效率,相较于 Elasticseach,同一份数据的存储资源成本降低了 60%。 Doris SQL 相比 Elasticseach DSL 更加简单易用,能够大幅提升开发效率和问题排查的效率。
在安全方面,当崩溃次数达到设定阈值时,系统会通过邮件通知相关人员,以便排查浏览器崩溃的原因。还可对登录次数进行统计,有效监测是否存在外部人员试图攻击接口。 在绩效统计方面,可对应用访问数据进行统计,以帮助我们评估工作情况,从而更好地安排工作。 优化流量损耗和磁盘占用:通过对页面中 JS、CSS、Image 等资源的统计,可有效地发现访问流量和资源大小并进行优化,以减少流量损耗和磁盘空间使用,从而实现降本提效。 提供业务系统健康报告:可准确监测应用 Web 页面所引用的资源、资源加载时长以及异常情况等关键信息,并根据这些信息生成应用健康报告,基于报告能够帮助企业完成业务系统的优化。
未来规划
冷热数据分离:冷热数据分离能够在降低成本的同时提高效率,未来我们计划将客户的冷数据存储到 S3 等存储介质,将热数据存储在相应的数据磁盘,以提高存储空间的利用率。 Doris Manager 部署集成:未来我们计划集成 Doris Manager ,以便客户能够直观便捷地排查和发现问题,监控集群的使用情况。
更多行业实践
智慧金融与政企:杭银消金|河北幸福消费金融|金融壹账通|平安人寿|奇富科技|同程数科|星云零售信贷|银联商务|招商信诺人寿|360数科
互联网与文娱:斗鱼|叮咚买菜|工商信息查询平台|货拉拉|荔枝微课|票务平台|奇安信|腾讯音乐|天眼查|网易互娱|网易严选|小米|小鹅通|约苗|字节跳动|知乎|360商业化
企业服务与新经济:橙联|度言|观测云|慧策|领健|领创|Moka BI|美联物业|拈花云科|思必驰|物易云通|云积互动|有赞|纵腾集团